package leetcode.editor.cn;

import java.util.Stack;

/**
 * @id: 516
 * @title: 最长回文子序列
 */
 
//给你一个字符串 s ，找出其中最长的回文子序列，并返回该序列的长度。 
//
// 子序列定义为：不改变剩余字符顺序的情况下，删除某些字符或者不删除任何字符形成的一个序列。 
//
// 
//
// 示例 1： 
//
// 
//输入：s = "bbbab"
//输出：4
//解释：一个可能的最长回文子序列为 "bbbb" 。
// 
//
// 示例 2： 
//
// 
//输入：s = "cbbd"
//输出：2
//解释：一个可能的最长回文子序列为 "bb" 。
// 
//
// 
//
// 提示： 
//
// 
// 1 <= s.length <= 1000 
// s 仅由小写英文字母组成 
// 
// Related Topics 字符串 动态规划 
// 👍 593 👎 0

public class P516LongestPalindromicSubsequence {
    public static void main(String[] args) {
        Solution solution = new P516LongestPalindromicSubsequence().new Solution();
        // todo
        int result = solution.longestPalindromeSubseq("bbbab");
        System.out.println(result);
    }
    
//leetcode submit region begin(Prohibit modification and deletion)
class Solution {

    public int longestPalindromeSubseq(String s) {
//        if (s.length() <= 1) {
//            return 1;
//        }
//        int[][] dp = new int[s.length()][s.length()];
//        int max = 1; // 最起码单个字符是回文
//        // 初始化单个字符肯定是回文
//        for (int i = 0 ; i < s.length() ; i++)
//            dp[i][i] = 1;
//
//        for (int i = 1 ; i < s.length() ; i++) {
//            for (int j = 0 ; j < i ; j++) {
//                // 如果子串长度为2，两个相等就是回文
//                final int len = Math.abs(i-j+1);
//                final boolean eq = s.charAt(i) == s.charAt(j);
//                if (len <= 2 && eq) {
//                    dp[i][j] = 1;
//                    max = Math.max(max, len);
//                    continue;
//                }
//                // 如果dp[i-1][j+1]是回文，头尾相等就是回文
//                if (dp[i-1][j+1] == 1 && eq) {
//                    dp[i][j] = 1;
//                    max = Math.max(max, len);
//                }
//            }
//        }
//        return max;
        return 0;
    }
}


//leetcode submit region end(Prohibit modification and deletion)


}